package org.yi.fc.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import com.google.common.base.Strings;
import com.jfinal.log.Logger;

/**
 * 敏感词工具类
 * @author ilgql
 *
 */
public class SensitiveWordUtils {
	
	private static final Logger logger = Logger.getLogger(SensitiveWordUtils.class);
	
	//敏感词列表
	private static final List<String> SENSITIVE_WORD_LIST = new ArrayList<String>();
	
	/**
	 * 加载敏感词文件
	 * @param fileName
	 * @param charset
	 * @return
	 */
	public static  List<String> loadSensitiveword(File file, String charset){
		logger.info("开始加载敏感词文件。。。");
		
		if( readFile( file,  charset) == null){
			throw new NullPointerException("读取敏感词文件失败");
		}else{
			logger.info("敏感词文件加载结束");
			logger.info("敏感词文件内容：" + SENSITIVE_WORD_LIST);
			return SENSITIVE_WORD_LIST;
		}
	}
	
	/**
	 * 根据指定编码读取文件
	 * @param fileName
	 * @param charset
	 * @return
	 */
	private static  List<String> readFile(File file, String charset) {
		
		if(!file.canRead()){
			logger.error("敏感词文件【" + file.getAbsolutePath() + "】不可读");
			return null;
		}
		
		try {
			InputStreamReader read = new InputStreamReader( new FileInputStream(file), charset);
			BufferedReader bufferedReader = new BufferedReader(read);
            String lineTxt = null;
            
            while((lineTxt = bufferedReader.readLine()) != null ){
                if(!Strings.isNullOrEmpty(lineTxt) ){
                	SENSITIVE_WORD_LIST.add(lineTxt);
                }
            }
            
            read.close();
            
		} catch (IOException e) {
			logger.error("读取敏感词文件失败", e);
			return null;
		}
		
        return SENSITIVE_WORD_LIST;
	}
	
	/**
	 * 敏感词检测
	 * @param content					检测内容
	 * @param sensitiveWordList			敏感词列表
	 * @return                          如果包含敏感词，则返回该敏感词；如果没有敏感词，则返回null
	 */
	public static String sensitiveWordCheck(String content){
		for(String word : SENSITIVE_WORD_LIST){
			if(content.indexOf(word) > -1 ){
				return word;
			}
		}
		return null;
	}
}
